package bible.sunflower.util.upload;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;

public class FileUploadByApache {
	
	static Logger log = Logger.getLogger( FileUploadByApache.class );
	
	public static boolean upload(HttpServletRequest req, String uploadDir){
	    try {
	    	//检查输入请求是否为multipart表单数据。
	    	boolean isMultipart = ServletFileUpload.isMultipartContent(req);
		    if (isMultipart){
		       //为该请求创建一个DiskFileItemFactory对象，通过它来解析请求。执行解析后，所有的表单项目都保存在一个List中。
		       DiskFileItemFactory factory = new DiskFileItemFactory();
		       //factory.setSizeThreshold(4096); // 设置缓冲区大小，这里是4kb
		       //factory.setRepository(tempPathFile);//设置缓冲区目录
		       ServletFileUpload upload = new ServletFileUpload(factory);
		       //设置最大文件尺寸，这里是4MB
		       //upload.setSizeMax(4194304); 
		       List<FileItem> items = upload.parseRequest(req);
		       Iterator<FileItem> itr = items.iterator();
		       while (itr.hasNext()) {
		           FileItem item = (FileItem) itr.next();
		           //检查当前项目是普通表单项目还是上传文件。	           
		           if (item.isFormField()) {
		             //如果是普通表单项目，显示表单内容。
				     String fieldName = item.getFieldName();
				     if (fieldName.equals("name")) 
		    	     log.debug("the field name is" + item.getString());//显示表单内容。
		           } else {
		        	   //如果是上传文件，显示文件名。 
		        	   log.debug("the upload file name is" + item.getName());
			           String fileName=item.getName();//获得文件名，包括路径		         
			           if(fileName!=null){
			              File fullFile=new File(item.getName());
			              File savedFile=new File(uploadDir,fullFile.getName());
			              item.write(savedFile);
			         }
		           }
		       }
		       log.debug("upload succeed");
		    }else{
		    	log.debug("the enctype must be multipart/form-data");
		    }
		}catch(Exception e) {
			log.error("upload file error...", e);
			return false;
		}	    
		return true;
	}

}
